/*Author: Seungbeom Ma
 *SJSU 
 * DATE: NOV 16
 * */

package tool.workflow;

import java.util.ArrayList;

import android.util.Log;

public class WorkFlowBuilder {
	public Graph SetWorkFlow(int Opt){
		Graph g=new Graph();
		// 25
		if(Opt == 1){
			// temp 7 nodes
			// built
			Node nA=new Node(10,100);
			Node nB=new Node(20, 30);
			Node nC=new Node(30,150);
			Node nD=new Node(40,80);
			Node nE=new Node(50,90);
			Node nF=new Node(60,3290);
			Node nG= new Node(70, 50);
			Node nH= new Node(80, 70);
			Node nI= new Node(90, 150);
			Node nJ= new Node(100, 3300);
			Node nK= new Node(110, 4250);
			Node nL= new Node(120, 3210);
			Node nM= new Node(130, 2180);
			Node nN= new Node(140, 150);
			Node nO= new Node(150, 1144);
			Node nP= new Node(160, 1160);
			Node nQ= new Node(170, 390);
			Node nR= new Node(180, 10);
			Node nS= new Node(190, 20);
			Node nT= new Node(200, 10);
			Node nU= new Node(210, 40);
			Node nV= new Node(220, 50);
			Node nW= new Node(230, 60);
			Node nX= new Node(240, 70);
			Node nY= new Node(250, 4270);

		
			//
			
			// add to workflow
			g.addNode(nA);
			g.addNode(nB);
			g.addNode(nC);
			g.addNode(nD);
			g.addNode(nE);
			g.addNode(nF);
			g.addNode(nG);
			g.addNode(nH);
			g.addNode(nI);
			g.addNode(nJ);
			g.addNode(nK);
			g.addNode(nL);
			g.addNode(nM);
			g.addNode(nN);
			g.addNode(nO);
			g.addNode(nP);
			g.addNode(nQ);
			g.addNode(nR);
			g.addNode(nS);
			g.addNode(nT);
			g.addNode(nU);
			g.addNode(nV);
			g.addNode(nW);
			g.addNode(nX);
			g.addNode(nY);

			
			// set root
			g.setRootNode(nA);
			// make relation
			// Node A
			g.connectNode(nA,nB);
			g.connectNode(nA,nC);
			g.connectNode(nA,nD);
			// Node B
			g.connectNode(nB,nE);
			g.connectNode(nB,nF);
			g.connectNode(nB,nG);
			//C
			g.connectNode(nC,nG);
			g.connectNode(nC,nH);
			//D
			g.connectNode(nD, nH);
			g.connectNode(nD, nI);
			//E
			g.connectNode(nE, nJ);
			g.connectNode(nE, nK);
			// F
			g.connectNode(nF, nK);
			g.connectNode(nF, nL);
			// G
			g.connectNode(nG, nL);
			g.connectNode(nG, nM);
			// H
			g.connectNode(nH, nN);
			//I
			g.connectNode(nI, nO);
			g.connectNode(nI, nP);
			// J
			g.connectNode(nJ, nQ);
			//K
			g.connectNode(nK, nR);
			//L
			g.connectNode(nL, nR);
			//M
			g.connectNode(nM, nS);
			//N
			g.connectNode(nN, nT);
			g.connectNode(nN, nU);
			g.connectNode(nN, nV);
			//O
			g.connectNode(nO, nV);
			g.connectNode(nO, nW);
			//P
			g.connectNode(nP, nW);
			g.connectNode(nP, nX);
			g.connectNode(nP, nY);
		}
		// 50
		else if(Opt == 2){
			// later lol
			Node nA=new Node(10,100);
			Node nB=new Node(20, 30);
			Node nC=new Node(30,150);
			Node nD=new Node(40,80);
			Node nE=new Node(50,90);
			Node nF=new Node(60,3290);
			Node nG= new Node(70, 50);
			Node nH= new Node(80, 70);
			Node nI= new Node(90, 150);
			Node nJ= new Node(100, 3300);
			Node nK= new Node(110, 4250);
			Node nL= new Node(120, 3210);
			Node nM= new Node(130, 2180);
			Node nN= new Node(140, 150);
			Node nO= new Node(150, 5144);
			Node nP= new Node(160, 1160);
			Node nQ= new Node(170, 390);
			Node nR= new Node(180, 10);
			Node nS= new Node(190, 20);
			Node nT= new Node(200, 10);
			Node nU= new Node(210, 40);
			Node nV= new Node(220, 50);
			Node nW= new Node(230, 60);
			Node nX= new Node(240, 70);
			Node nY= new Node(250, 4270);
			// additional
			Node nZ= new Node(250, 70);
			Node aA=new Node(10,100);
			Node aB=new Node(20, 30);
			Node aC=new Node(30,150);
			Node aD=new Node(40,80);
			Node aE=new Node(50,90);
			Node aF=new Node(60,3290);
			Node aG= new Node(70, 50);
			Node aH= new Node(80, 70);
			Node aI= new Node(90, 150);
			Node aJ= new Node(100, 3300);
			Node aK= new Node(110, 4250);
			Node aL= new Node(2120, 3210);
			Node aM= new Node(130, 2180);
			Node aN= new Node(4000, 150);
			Node aO= new Node(150, 1144);
			Node aP= new Node(160, 2160);
			Node aQ= new Node(70, 390);
			Node aR= new Node(150, 10);
			Node aS= new Node(190, 20);
			Node aT= new Node(200, 10);
			Node aU= new Node(1500, 40);
			Node aV= new Node(220, 50);
			Node aW= new Node(2230, 60);
			Node aX= new Node(9999, 70);
			
			// add to workflow
			g.addNode(nA);
			g.addNode(nB);
			g.addNode(nC);
			g.addNode(nD);
			g.addNode(nE);
			g.addNode(nF);
			g.addNode(nG);
			g.addNode(nH);
			g.addNode(nI);
			g.addNode(nJ);
			g.addNode(nK);
			g.addNode(nL);
			g.addNode(nM);
			g.addNode(nN);
			g.addNode(nO);
			g.addNode(nP);
			g.addNode(nQ);
			g.addNode(nR);
			g.addNode(nS);
			g.addNode(nT);
			g.addNode(nU);
			g.addNode(nV);
			g.addNode(nW);
			g.addNode(nX);
			g.addNode(nY);
			// ADDIONTAL

			g.addNode(nZ);
			g.addNode(aA);
			g.addNode(aB);
			g.addNode(aC);
			g.addNode(aD);
			g.addNode(aE);
			g.addNode(aF);
			g.addNode(aG);
			g.addNode(aH);
			g.addNode(aI);
			g.addNode(aJ);
			g.addNode(aK);
			g.addNode(aL);
			g.addNode(aM);
			g.addNode(aN);
			g.addNode(aO);
			g.addNode(aP);
			g.addNode(aQ);
			g.addNode(aR);
			g.addNode(aS);
			g.addNode(aT);
			g.addNode(aU);
			g.addNode(aV);
			g.addNode(aW);
			g.addNode(aX);
			// set root
			g.setRootNode(nA);
			// make relation
			// Node A
			g.connectNode(nA,nB);
			g.connectNode(nA,nC);
			g.connectNode(nA,nD);
			// Node B
			g.connectNode(nB,nE);
			g.connectNode(nB,nF);
			g.connectNode(nB,nG);
			//C
			g.connectNode(nC,nG);
			g.connectNode(nC,nH);
			//D
			g.connectNode(nD, nH);
			g.connectNode(nD, nI);
			//E
			g.connectNode(nE, nJ);
			g.connectNode(nE, nK);
			// F
			g.connectNode(nF, nK);
			g.connectNode(nF, nL);
			// G
			g.connectNode(nG, nL);
			g.connectNode(nG, nM);
			// H
			g.connectNode(nH, nN);
			//I
			g.connectNode(nI, nO);
			g.connectNode(nI, nP);
			// J
			g.connectNode(nJ, nQ);
			//K
			g.connectNode(nK, nR);
			//L
			g.connectNode(nL, nR);
			//M
			g.connectNode(nM, nS);
			//N
			g.connectNode(nN, nT);
			g.connectNode(nN, nU);
			g.connectNode(nN, nV);
			//O
			g.connectNode(nO, nV);
			g.connectNode(nO, nW);
			//P
			g.connectNode(nP, nW);
			g.connectNode(nP, nX);
			g.connectNode(nP, nY);
			// Q
			g.connectNode(nQ,nZ);
			//R
			g.connectNode(nR,nZ);
			// S
			g.connectNode(nS,aA);
			g.connectNode(nS,aB);
			//T
			g.connectNode(nT,aC);
			// U
			g.connectNode(nU,aD);
			//X
			g.connectNode(nX,aE);
			//nz
			g.connectNode(nZ,aF);
			g.connectNode(nZ,aG);
			//aa
			g.connectNode(aA,aG);
			g.connectNode(aA,aH);
			//ab
			g.connectNode(aB,aI);
			//AC
			g.connectNode(aC,aI);
			//ad
			g.connectNode(aD,aI);
			g.connectNode(aD,aJ);
			//AE
			g.connectNode(aE,aK);
			//AG
			g.connectNode(aG,aL);
			//AH
			g.connectNode(aH,aM);
			g.connectNode(aH,aN);
			//AI
			g.connectNode(aI,aN);
			//AJ
			g.connectNode(aJ,aO);
			//AK
			g.connectNode(aK,aP);
			//AL 
			//SKIP
			//AM
			g.connectNode(aM,aQ);
			//AN
			g.connectNode(aN,aR);
			//AO
			g.connectNode(aO,aS);
			g.connectNode(aO,aT);
			//AP
			g.connectNode(aP,aT);
			//AQ
			g.connectNode(aQ,aU);
			//AR
			g.connectNode(aR,aV);
			//AS SKIP
			//AT
			g.connectNode(aT,aW);
			//AU
			g.connectNode(aU,aX);
			//AV
			//SKIP
			g.connectNode(aW,aX);
		}
		//100
		else{
			// later lol
			
		}
		return g;
	}
	
	
	// will use in the future
	public Graph Set_Perfomance_Test_Node(){
		Graph g=new Graph();
		Node nA=new Node(10,100000);
		g.addNode(nA);
		g.setRootNode(nA);
		return g;
	}
	
	// For testing Perfomance by single node
	public ArrayList<Graph> Time_Test_Graph_Builder(){
		ArrayList<Graph> re_al  = new ArrayList<Graph>();
		
		for(int i = 1 ; i <= 5 ; i++ ){
			Graph g=new Graph();
			Log.d("Building Node for Const Test", String.valueOf(((i) * 3000)) );
			Node nA=new Node(10, ((i) * 3000));
			g.addNode(nA);
			g.setRootNode(nA);
			re_al.add(g);
		}
		return re_al;

	}
	// for testing energy consumption
	public Graph  Energy_Test_Graph_Builder(int selection){
		Graph g=new Graph();
		int number = (selection-2131165193) * 2000;
		Node nA=new Node(10,number );
		
		Log.d("Building ET Node",String.valueOf(number));
		g.addNode(nA);
		g.setRootNode(nA);
		return g;
	}
	
	public Graph Build_Custom_Single_Node(int Process_Amount){
		Graph g=new Graph();
		Node nA=new Node(10,Process_Amount );
		Log.d("Building CM Node",String.valueOf(Process_Amount));
		g.addNode(nA);
		g.setRootNode(nA);
		return g;
	}

}
